Skip to content

IEEE 802.11: fix Block Ack ADDBA transaction and agreement lifecycle - #1148

Open
mgonzalezlopezudc wants to merge 26 commits into
inet-framework:masterfrom
mgonzalezlopezudc:cleanup/fix-ieee80211-addba-transaction-minimal
Open

mgonzalezlopezudc wants to merge 26 commits into
inet-framework:masterfrom
mgonzalezlopezudc:cleanup/fix-ieee80211-addba-transaction-minimal

Conversation

@mgonzalezlopezudc

@mgonzalezlopezudc mgonzalezlopezudc commented Aug 30, 2026 •

Copy link
Copy Markdown
Contributor

Management frames can be queued, cancelled, retried, fragmented or dropped before their transaction completes. This series makes ADDBA transactions and Block Ack agreement teardown follow those outcomes. An unsent ADDBA rejected by RED retires without arming a response timer and releases same-TID data. A synchronous queue drop during inactivity expiry cannot invalidate traversal or tear down a replacement agreement.

Behavior and architectural surface

  • Generic queue contracts add provider-selected predicate extraction through IPacketExtractor and the logical packetQueueDeparture signal. Each queue boundary reports exactly one borrowed departure, including prequeue filter rejection, nested queues and shared-buffer eviction. Shared buffers detach affected packets before publishing notifications. HCF/DCF consume these contracts without depending on concrete RED or FIFO implementations.
  • Originator transactions match live Dialog Tokens, hold same-TID traffic while pending, and start response deadlines after successful request transmission. Request failure, cancellation, timeout and retry backoff have explicit lifecycle handling. Recipient renegotiation replaces the appropriate agreement state and echoes the request token.
  • Management transaction cancellation uses IManagementFrameTransactionHandler. Fragmented management bodies are reassembled before dispatch. Generation checks protect teardown, reassembly and agreement replacement from stale work.
  • Absolute inactivity deadlines and first-fragment receive lifetimes govern expiry. Expiry traversal snapshots agreement keys and generations, then rechecks live state across synchronous callbacks. Quarantine prevents expired agreements from remaining usable while queued traffic is released.
  • BAR ACK-state updates are scoped to the addressed receiver before matching TID and sequence number. Peers with overlapping TID/sequence numbers remain independently eligible for retransmission and their own BAR; a regression covers Basic and Compressed BARs with response and timeout outcomes.
  • BAR release skips incomplete data. Recipient timeout selection follows recipient policy. A-MSDU selection accounts for serialized padding, avoids ordinary fragmentation and retains negotiated peer support.
  • Ieee80211MgmtFrameSerializer::decodeAssociationId() marks malformed peer AIDs incorrect with markIncorrect(). The local teardown tag carries generationId; role, peer and TID come from DELBA/context. These tags add no wire fields.

Custom queue/buffer and MAC implementations must implement the new contract operations explicitly, including cancellation/abort, agreement release and reassembly purge obligations. WHATSNEW and doc/src/migration-guide/index.rst document the migration. Removal reason values remain DEQUEUED=0, REMOVED=1 and DROPPED=2. Configuration changes cover ADDBA response timing/backoff, receive lifetime and the transactional Block Ack example. No source seals or new architectural exceptions are introduced.

Commit reading order

The series contains 22 commits on master base 7287f347aaca36e557c708d6930a6f5a450b2833, ending at f7e8d8c5f2656c66c782838e883a0ac775a28c99. Generic queue contracts precede the MAC changes; the final source commit adds receiver isolation for BAR ACK state.

Commit Change
3354306 Align inherited upstream graphical expectations
33ee32b Record the audit-resolution plan
4b14783 Queue extraction and logical departures, including compound/filter coverage
f3b6df4 Track pending queue departures through signals
6f28535 Explicit originator ADDBA transactions and recipient token echo
55bd494 Recipient renegotiation and transactional example
898db35 Reassemble and expire fragmented MAC frames
079eae6 Cancel superseded management transactions
ba3cfff Protect teardown generations
694d4da Absolute inactivity deadlines and reentrant expiry traversal
42f63fe Generation-safe fragment reassembly
d3a0a3d Receive lifetime during reordering
bdf89b6 Quarantine expired agreements and guard release callbacks
43d59a4 Skip incomplete data released by a BAR
f91ff45 Honor recipient timeout policy
b8250ed Valid A-MSDU fragmentation and sizing
89666c7 Preserve management bodies during fragmentation
6890088 Flag malformed association IDs
bb125ac Retain negotiated A-MSDU support
aaf4314 Record completed verification
db10c29 Archive the completed plan
f7e8d8c Isolate Block Ack request state by receiver

BAR handling and timeout policy are independently reviewable fixes. Fingerprint updates accompany the source changes that cause them; inherited upstream drift is isolated in the first commit.

Fingerprint changes

Expectations are recorded in tests/fingerprint/examples.csv and tests/fingerprint/showcases.csv. Baseline updates accompany their causal source commits.

Owning commit Behavior recorded
3354306 Inherited graphical drift on unchanged upstream. The three Block Ack-related tyf tokens are refreshed on the current base; the seven other previously accepted graphical updates are retained.
6f28535 Explicit ADDBA transactions change response timing and eligible traffic. Aggregate service changes graphical queue counters by dequeuing members instead of administratively removing them.
55bd494 Initial expectations for MacQosWithTransactionalBlockAck, introduced with recipient renegotiation.
898db35 Fragment reassembly and the 512-TU receive lifetime. Earlier diagnostic runs restored the preceding expectations with a 100-second lifetime override.
d3a0a3d Receive lifetime during reordering changes the ad hoc QoS Block Ack run. Earlier aligned traces isolated an expired-fragment Block Ack bitmap change from 0xffff to 0x0004.
b8250ed Serialized A-MSDU padding and fragmentation eligibility change aggregate selection. Earlier diagnostic restoration of the preceding policies reproduced the preceding expectations.

Block Ack expectations on the current master

Master commit 9a9e65cbb5 corrects Basic and Compressed BAR length from 38 to 20 bytes and fixes their wire encoding. Its transmission timing changes require fresh values for the topic's later Block Ack transitions. All six existing cases already match master's nonvisual expectations before the originator ADDBA change.

Owning commit Refreshed configurations
3354306 Only inherited tyf values for MacQosWithBlockAck, HCFfragblockack and txop/General. Base, first-commit and pre-ADDBA runs reproduce the same values.
6f28535 blockack/NoFragmentation, blockack/Fragmentation, blockack/MixedTraffic, fragmentation/HCFfragblockack, txop/General, and the intermediate examples/wireless/qos/MacQosWithBlockAck value.
55bd494 The initial examples/wireless/qos/MacQosWithTransactionalBlockAck value.
b8250ed The final examples/wireless/qos/MacQosWithBlockAck value.

The ordinary QoS Block Ack case records 5570-9d59/tplx;c521-a55d/~tNl;e5fc-a44c/~tND at the originator commit and changes to f7c0-98c4/tplx;c808-a11f/~tNl;e5b6-5b54/~tND at the A-MSDU policy commit. Keeping both transitions makes the intermediate commits pass independently.

The approved correction changes seven CSV rows at head, including their three declared graphical ingredients. All source and non-baseline files remain identical to the corresponding pre-correction trees at every commit. The broader feature-series fingerprint coverage comprises 16 configuration/run rows with 59 ingredients; current-head revalidation below is scoped to the seven reported Block Ack cases.

Validation

Current head: f7e8d8c5f2

  • All 22 commits pass incremental debug builds and scoped opp_repl checks: 149 case executions and 491 fingerprint ingredient checks. The six existing cases run at the first five commits; all seven run from the transactional example's introduction onward.
  • The final CI fingerprint wrapper passes all seven cases and all 23 declared ingredients, including tyf.
  • Commit-history and whitespace checks pass. Source/non-baseline equality is verified at every rewritten commit.
  • These are local debug results for the selected cases. Release builds, the broader feature-test union and remote CI are not included in this revalidation.

The per-commit runs use opp_repl --load @opp -p inet --external-command-log-level WARN with a local harness that reads the selected tracked CSV rows, after each incremental build. Reproduce the final selected fingerprint check from the repository root with:

make MODE=debug -j$(nproc)
(
  cd tests/fingerprint
  ./fingerprinttest -d -t 6 \
    -m '/showcases/wireless/blockack/|/showcases/wireless/txop/.*-c General -r 0|/showcases/wireless/fragmentation/.*-c HCFfragblockack -r 0|/examples/wireless/qos/.*-c MacQosWith(Transactional)?BlockAck -r 0' \
    -f tplx -f '~tNl' -f '~tND' -f tyf \
    examples.csv showcases.csv
)
doc/project/enforcement/check-commits.sh 7287f347aa..HEAD

All cases use run 0 and their CSV time limits: 1 s for blockack/fragmentation, 5 s for TXOP, 10 s for ordinary QoS Block Ack, and 3 s for transactional QoS.

Earlier feature validation

The completed feature-validation record in plan/done/pr-1148-resolve-audit-findings.md covers the earlier base 0c85e5dd6bc2969987286210962983b19384670e and head 71d13ab60ec9c0cec3a62b2d6b013b98b43e7ccf. It records passing debug/release builds, 14 focused test files (five unit, six module and three queueing), all 59 fingerprint ingredients, and middle-commit originator, expiry and aggregation checks. These results establish the earlier feature-validation scope; the current-base checks are listed separately above.

Commands recorded for that feature-validation build and focused test union:

make MODE=debug -j6
make MODE=release -j6

inet_run_unit_tests -m debug -f '(Ieee80211AddbaTransaction_1|Ieee80211MgmtFrameSerializer_1|Ieee80211MgmtTransactionTag_1|Ieee80211OriginatorExpiryReentrant_1|Ieee80211RecipientExpiryReentrant_1)\.test$'
inet_run_module_tests -m debug -f '(Ieee80211BlockAckInactivityTimer_1|Ieee80211MgmtApCancellation_1|Ieee80211MgmtApHcfQueueDrop_1|Ieee80211MgmtApQueueDrop_1|Ieee80211HcfAgreementQueueDrop_1|Ieee80211HcfAddbaRedDrop_1)\.test$'
inet_run_queueing_tests -m debug -f '(PacketQueueDepartureSignal_1|CompoundPacketQueueRedDeparture_1|CompoundPacketQueueCompositionDeparture_1)\.test$'

Fingerprints ran in release mode through opp_repl --load @opp --external-command-log-level WARN, using the retained local combined-ingredient harness and expectations from the tracked CSV files. All simulations completed and all 59 ingredients passed. This invocation requires the local harness; it is not a standalone fingerprint test command.

Queueing-only and IEEE 802.11 with required dependencies also passed isolated debug builds. Each feature configuration used:

opp_featuretool disable -f all
opp_featuretool enable -r Queueing  # Ieee80211 for the second configuration
make makefiles
make MODE=debug -j4

Commit, classification, source-seal and per-commit whitespace gates passed. Scoped queueing/Wi-Fi architecture and changed-file naming checks passed. At that earlier checkpoint, full-tree architecture, interface and naming checks recorded 25, 15 and 23 findings respectively, matching its pinned upstream with no new findings. Validation includes an implementation self-audit; these local results do not assert remote CI success or an independent review.

Scope remains single-link station/AP operation; this does not add MLO or EHT link negotiation. Dynamic fragmentation coverage is HE-only, and custom implementation migration was checked against in-tree users.


Devin Review

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Devin Review

Comment on lines +209 to +213
if (hasOtherGeneration) {
expiredSequenceNumbersMap[contextKey].insert(key.extendedSequenceNumber);
pruneExpiredSequenceNumbers(sequenceSpaceKey);
delete packet;
return nullptr;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 BAR delivery crashes on rejected fragments

When addFragment rejects BAR-released fragments as generation-ambiguous, the delivery path stores null and dereferences it. The simulation aborts instead of dropping them.

Prompt for agents
BasicReassembly::addFragment can now reject and delete a fragment when another generation with the same raw sequence number exists, returning nullptr. RecipientQosMacDataService::controlFrameReceived unconditionally appends defragment(fragments) to defragmentedFrames and later dereferences every entry while handling a BAR. Update the BAR release path to treat a null reassembly result as a dropped/incomplete frame, mirroring dataFrameReceived, and preserve packet ownership and drop signaling correctly. Add coverage where BAR releases a complete reorder-buffer entry while BasicReassembly has conflicting generation state.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@mgonzalezlopezudc
mgonzalezlopezudc force-pushed the cleanup/fix-ieee80211-addba-transaction-minimal branch from 9b1f54c to 449a91a Compare September 5, 2026 21:18
@mgonzalezlopezudc
mgonzalezlopezudc force-pushed the cleanup/fix-ieee80211-addba-transaction-minimal branch 7 times, most recently from 5d095bf to 991f626 Compare September 14, 2026 21:15
@mgonzalezlopezudc
mgonzalezlopezudc force-pushed the cleanup/fix-ieee80211-addba-transaction-minimal branch 3 times, most recently from 20de9fa to f7e8d8c Compare September 15, 2026 20:18
Link-layer initialization may resolve peer interfaces by their configured
addresses. Declare network-interface configuration as a prerequisite so these
queries see initialized identities regardless of module declaration order.
The physical-layer prerequisite remains in place.

This ordering supplies the shared readiness contract used by simplified
wireless association before network configuration.

No fingerprint or statistical baseline is changed. The selected regression
contract covers MacNonQos and MacQos, run 0, in examples/adhoc/qos, plus
simplified association and AP lifecycle module tests in debug mode.

Plan: plan/done/80211htcapop-refactor-v3.md
Change: src.common.InitStages | behavior.change | test | ieee80211-htcapop-v3
Capability preparation previously depended on initialization broadcasts and
mixed local PHY support with active BSS operation. Make the MAC prepare an
idempotent profile through typed PHY contributors, and let management own
accepted BSS transitions and simplified peer installation.

Keep directional peer capabilities immutable and evaluate operation and HT
eligibility separately. Publish committed MIB changes after management
bookkeeping, guard state mutation, and replace modesetChanged listeners
with explicit configuration providers. Prepare simplified associations
before network configuration, independently of node declaration order.

Keep simplified legacy STAs associated without accepting HT operation from
an HT AP. Cover both declaration orders and shutdown/crash restart, while
retaining BSS identity and channel and removing AP-side peer resources on stop.

Migrate dependent consumers and regression fixtures together with the
contracts. Document public API migration and the notification lifetime.

Validation scope: debug build; 3 focused unit and 9 module cases covering
capability preparation, provider wiring, association, lifecycle, beacon and
channel updates; MacNonQos and MacQos run 0 fingerprints at 10s with unchanged
tplx expectations. No fingerprint or statistical baseline changes.

Plan: plan/done/80211htcapop-refactor-v3.md
Change: src.ieee80211 | behavior.change | test expected whatsnew migration | ieee80211-htcapop-v3
Catalog-only consumers should not require capability preparation. Introduce
a paired C++/NED IIeee80211ModeSetProvider contract and make MAC
configuration extend it with the preparation operation used by management.
ModeSetModuleBase now depends only on the read-only provider.

Migrate the replacement-provider fixture to the narrow contract, removing
its throwing preparation stub. Update architecture, migration guidance and
release notes to identify the contract custom catalog providers implement.

Validation of the integrated changes: debug build, 5 focused module tests,
3 unit tests and 18 unchanged Wi-Fi/Ethernet/VLAN/configurator fingerprint
cases pass. Scoped architecture checks pass; interface checking reports
only the existing AV-CONTRACT-02 bodies. No recorded baseline changes.

Plan: plan/done/80211htcapop-refactor-v3.md
Change: src.ieee80211 | refactor | whatsnew migration | ieee80211-htcapop-v3
Retain the previously accepted upstream graphical re-recording and refresh
its three Block Ack-related tokens on the rebased master 7287f34.
MacQosWithBlockAck, HCFfragblockack and txop/General produce the same values
on master, this baseline-only commit and the pre-ADDBA checkpoint. Their
nonvisual fingerprints already match master and remain unchanged here.

Upstream 9a9e65c corrected BAR length and wire encoding after the earlier
recording. These three graphical values are inherited drift, so they belong
in this prerequisite rather than a later protocol change. The other seven
previously accepted graphical updates are retained.

The user approved this exact correction after the 2026-09-15 attribution
report. Scoped debug verification uses run 0 and all declared ingredients.

Change: tests.fingerprint | behavior.change | - | pr-1148-resolve-audit-findings
Record the authorized repair, evidence and reconstruction requirements before
referring to this plan from implementation commits.

Change: plan | behavior.add | - | pr-1148-resolve-audit-findings
Consumers need provider-selected predicate extraction and exactly one terminal
departure at each logical queue boundary. Include prequeue filter rejection,
nested composition and shared-buffer eviction without coupling generic queues
to MAC transaction tags.

Validation: diagnostic debug and release builds; 7 focused
unit/module/queueing cases; 56 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.queueing | behavior.add+change | test migration whatsnew | pr-1148-resolve-audit-findings
DCF and HCF must retire pending-frame eligibility when the logical queue
dequeues, removes or drops a frame. Subscribe to the complete queue departure
contract and filter descendant emissions so each outcome is handled once.

Validation: diagnostic debug and release builds; 8 focused
unit/module/queueing cases; 56 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac | behavior.change.fix | test | pr-1148-resolve-audit-findings
An ADDBA request can be rejected before transmission, retransmitted or
answered late. Track its identity, transmission state and response deadline
explicitly, match responses to the live transaction, and restore eligible data
after terminal failure. A real HCF/RED regression covers rejection before
enqueue. Recipient responses echo the request token, completing the wire
contract required by originator validation.

Block Ack baselines reflect transmitted-request deadlines, live token
matching and peer/TID eligibility. Refresh the three blockack showcases,
HCFfragblockack, txop/General and MacQosWithBlockAck on master 7287f34,
which includes the corrected 20-byte BAR from 9a9e65c. The preceding
checkpoint preserves master values. MacQosWithBlockAck records its
intermediate trajectory here; the later A-MSDU policy fix owns its next
transition. Non-Block-Ack graphical changes retain the accepted queue-counter
updates: aggregate service dequeues members instead of removing them.

The user approved these exact refreshed expectations after the 2026-09-15
attribution report. Scoped debug verification uses run 0 and all declared
ingredients. Transaction and real RED/HCF tests cover terminal outcomes.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211 | behavior.add+change.fix | fingerprint test migration whatsnew | pr-1148-resolve-audit-findings
A successful replacement ADDBA agreement must reset the recipient's reordering
and receive state, while a duplicate request must not repeat that state
transition. Preserve the response body for the matching retry and exercise
successful and timed-out transactions in a focused example.

Add the three MacQosWithTransactionalBlockAck expectations measured with the
corrected BAR timing on rebased master 7287f34. This example first exists
here, so its initial baseline belongs here. The six existing selected Block
Ack cases preserve their preceding values. The transactional values remain
stable through the final source checkpoint.

The user approved these exact refreshed expectations after the 2026-09-15
attribution report. Scoped debug verification uses run 0 and all declared
ingredients.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211 | behavior.add+change.fix | fingerprint test migration whatsnew | pr-1148-resolve-audit-findings
A fragmented action body cannot be interpreted as a complete ADDBA or DELBA.
Preserve action context while fragments are queued and retried, and dispatch
management actions only after successful reassembly. Shared fragment
reassembly now expires incomplete bodies after the configured receive lifetime
(512 TUs by default); late bodies are discarded before dispatch.

Six rows change (16 values) because incomplete fragment bodies now expire
after 512 TUs instead of completing late. Extending only the diagnostic
lifetime beyond the run duration restores all 24 preceding values in those
rows; expiry tests establish the intended drop behavior.

The user accepted these exact source-owned expectations on 2026-09-15.

Validation: diagnostic debug and release builds; 9 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac | behavior.add+change.fix | fingerprint test migration whatsnew | pr-1148-resolve-audit-findings
A superseded AP management transaction must not leave queued siblings or
continue a later frame exchange. Distinguish deferred cancellation from
immediate abort so an already handed-down transmission keeps its owner until
completion, and require explicit sequence-handler implementations.

Validation: diagnostic debug and release builds; 10 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211 | behavior.add+change.fix | test migration whatsnew | pr-1148-resolve-audit-findings
A delayed or retried DELBA must not terminate a replacement agreement for the
same peer and TID. Carry the sender-local generation through fragments and
retries, and make acknowledged, aborted and cancelled teardown outcomes
explicit.

Validation: diagnostic debug and release builds; 10 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac | behavior.add+change.fix | test migration whatsnew | pr-1148-resolve-audit-findings
The shared HCF inactivity timer must represent the earliest enabled agreement
deadline and cancel when no agreement remains. Terminal queue callbacks can
remove current or sibling agreements during expiry, so snapshot
peer/TID/generation values and relookup them before each action. Direct
mutation tests and real bounded-queue HCF expiry cover both roles.

Validation: diagnostic debug and release builds; 14 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac | behavior.add+change.fix | test migration whatsnew | pr-1148-resolve-audit-findings
Late fragments and sequence reuse must not combine bodies from different
generations. Keep reassembly identity and sequence-space decisions coherent
across retries, duplicates and replacement receive state.

Validation: diagnostic debug and release builds; 14 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac | behavior.add+change.fix | test whatsnew | pr-1148-resolve-audit-findings
Incomplete fragmented bodies must expire from their first reception even when
Block Ack reordering delays delivery. Preserve receive lifetime across
buffering and reject late fragments without delivering a hybrid or expired
body.

Ad-hoc MacQos run 1 changes three values. There are three extra receive drops
and three fewer deliveries. A byte trace isolates one BasicBlockAck bitmap
change after prevented late completion stops advancing old-sequence
acknowledgment state. All packet times and lengths remain identical.

The user accepted these exact source-owned expectations on 2026-09-15.

Validation: diagnostic debug and release builds; 14 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac | behavior.add+change.fix | fingerprint test migration whatsnew | pr-1148-resolve-audit-findings
Retained teardown state is not an active data-plane agreement. Quarantine
expired agreements, release their outstanding Block Ack frames, and relookup
the original generation after the release callback before generating DELBA.
Extend the expiry regression to replacement during frame release.

Validation: diagnostic debug and release builds; 14 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac | behavior.add+change.fix | test migration whatsnew | pr-1148-resolve-audit-findings
When a BAR releases data fragments that do not reassemble into a packet,
recipient processing skips data dispatch instead of dereferencing a null
result.

Validation: diagnostic debug and release builds; 14 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac.RecipientQosMacDataService | behavior.change.fix | test whatsnew | pr-1148-resolve-audit-findings
The timeout-policy ternary selected the wrong branch. A nonzero recipient
policy overrides the advisory request timeout; the model's zero-policy
convention inherits it. Cover both choices and the resulting inactivity
deadlines independently of BAR handling.

Validation: diagnostic debug and release builds; 14 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac.RecipientBlockAckAgreementHandler | behavior.change.fix | test migration whatsnew | pr-1148-resolve-audit-findings
Basic A-MSDUs must fit the configured frame limit with subframe headers and
padding, and cannot use this policy's ordinary fragmentation path. Treat -1 as
an unlimited aggregation size while enforcing finite limits on the serialized
body.

Correct serialized padding changes aggregate selection; ordinary A-MSDU
fragmentation is suppressed. Retain the accepted eight-row update and refresh
MacQosWithBlockAck on rebased master 7287f34, which includes the corrected
BAR timing. Among the seven selected Block Ack cases, only this row changes
at this boundary. Its preceding intermediate value belongs to the originator
ADDBA commit; this commit owns the final value. Tests cover exact padding
bounds, unlimited size and A-MSDU versus ordinary-data fragmentation.

The user approved these exact refreshed expectations after the 2026-09-15
attribution report. Scoped debug verification uses run 0 and all declared
ingredients.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac | behavior.change.fix | fingerprint test migration whatsnew | pr-1148-resolve-audit-findings
Fragment bodies contain slices of the serialized management body, not repeated
complete management headers. Preserve the body bytes through fragmentation and
reassembly and keep transaction metadata with the fragments.

Validation: diagnostic debug and release builds; 14 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac.Fragmentation | behavior.change.fix | test whatsnew | pr-1148-resolve-audit-findings
Malformed peer association IDs are packet errors, not reasons to terminate the
simulation. decodeAssociationId marks the header incorrect and the serializer
regression checks the malformed cases.

Validation: diagnostic debug and release builds; 14 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mgmt.Ieee80211MgmtFrameSerializer | behavior.change.fix | test whatsnew | pr-1148-resolve-audit-findings
A successful ADDBA response supplies the recipient's A-MSDU support for this
agreement. Retain that response bit rather than the request's initial
capability so later aggregation obeys the negotiated agreement.

Validation: diagnostic debug and release builds; 14 focused
unit/module/queueing cases; 59 fingerprint ingredients with repeated moving
candidates. Reconstructed commits receive the same applicable scoped checks
before promotion.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: src.ieee80211.mac.OriginatorBlockAckAgreementHandler | behavior.change.fix | test whatsnew | pr-1148-resolve-audit-findings
Record the accepted baseline provenance, passing source-prefix and final verification, repaired findings, preserved checkpoints and scoped evidence limitations.

Plan: plan/pending/pr-1148-resolve-audit-findings.md
Change: plan | behavior.change | - | pr-1148-resolve-audit-findings
Move the completed plan without changing its content, preserving its history and the already verified source tree.

Plan: plan/done/pr-1148-resolve-audit-findings.md
Change: plan | location | - | pr-1148-resolve-audit-findings
With outstanding frames for two peers sharing a TID and sequence number,
a BAR addressed to one peer marked both peers as waiting for Block Ack.
The other peer then remained ineligible for retransmission or its own BAR,
because response and timeout processing only updated the addressed peer.

Filter ACK-status entries by the BAR receiver before applying the existing
TID and sequence checks. Add a regression covering Basic and Compressed
BARs with both response and timeout outcomes.

Validation: debug build; peer-isolation regression fails before the fix and
passes after it; existing ADDBA transaction test passes; both focused QoS
Block Ack fingerprint cases pass with unchanged baselines. Scoped source
seal and architecture checks pass.

Change: src.ieee80211.mac.QosAckHandler | behavior.change.fix | test
The cancellation regression introduced by this topic accessed MIB fields that the new upstream makes private. Use its owner API so the test builds on the rebased branch. Continue release-note numbering after the upstream additions.

Change: tests | behavior.change.fix | whatsnew
@mgonzalezlopezudc
mgonzalezlopezudc force-pushed the cleanup/fix-ieee80211-addba-transaction-minimal branch from f7e8d8c to a7352e1 Compare September 21, 2026 12:51

This branch had an error being deployed

1 failed (outdated) deployment
sealed-source-change — 539942a4 Deployed Sep 5, 2026 by mgonzalezlopezudc via Approve sealed source #31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant